package models;

import java.util.GregorianCalendar;
import java.util.List;

import models.dados.BancoAdapter;
import models.dados.BancoTeste;
import models.dados.ChaveRepetidaException;
import models.dados.DAO;
import models.dados.DadoNaoEncontradoException;

import play.db.jpa.Model;

public class PedidosCliente extends Model {

	private DAO banco;

	public PedidosCliente() {
		banco = BancoAdapter.getInstancia();
	}

	public Pedido getPedido(long numero) throws DadoNaoEncontradoException {
		return this.banco.getPedido(numero);
	}

	public void cancelarPedido(long numero, String usuario)
			throws DadoNaoEncontradoException, AcessoNegadoException,
			UsuarioBloqueadoException {
		Cliente cliente = banco.getClienteCadastrado(usuario);
		if (cliente.estaBloqueado()) {
			throw new UsuarioBloqueadoException();
		}
		Pedido pedido = banco.getPedido(numero);
		if (pedido.getStatus().equals("pendente")) {
			pedido.setStatus("cancelado");
			banco.alterarPedido(pedido);
		} else {
			throw new AcessoNegadoException();
		}

	}

	public void finalizarPedido(Pedido pedido, String usuario)
			throws DadoNaoEncontradoException {
		Cliente cliente = banco.getClienteCadastrado(usuario);
		pedido.setClienteCadastrado(true);
		pedido.setCliente(cliente);
		pedido.finalizarPedido();
		
		try {
			banco.inserirPedido(pedido);
		} catch (ChaveRepetidaException e) {
			System.out.println("ChaveRepetidaException");
			pedido.setNumero(GeradorDeNumero.gerarNumero());
			finalizarPedido(pedido, usuario);
		}

	}

	public void finalizarPedido(Pedido pedido, String nome, String rua,
			int numero, String bairro, String complemento, String cep,String email,
			String telefone) throws ChaveRepetidaException {
		Endereco end = new Endereco(rua, numero, bairro, complemento, cep, telefone);
		Cliente cliente = new Cliente(nome, email, end, end, null, null, true, false, -1, TipoUsuario.CLIENTE_NAO_CADASTRADO);
		pedido.setCliente(cliente);
		pedido.setClienteCadastrado(false);
		pedido.finalizarPedido();
		banco.inserirPedido(pedido);

	}

	public List<Pedido> listarPedidos(long numero,String status, String usuario,GregorianCalendar dataExata,
			GregorianCalendar dataInicial, GregorianCalendar dataFinal) throws DadoNaoEncontradoException {
        Cliente cliente = banco.getClienteCadastrado(usuario);
		return banco.listarPedidos(numero, usuario,null, dataExata, dataInicial, dataFinal, status, null, null);
	}

	
	
	
	

}
